package bcontractor.api;

import java.util.Collection;
import java.util.Set;

/**
 * Interface for any set of sentences.
 * 
 * @author lundberg
 * 
 * @param <S>
 */
public interface SentenceSet<S extends Sentence<S>> extends Iterable<S> {

    SentenceSet<S> with(Collection<? extends S> sentences);

    SentenceSet<S> with(SentenceSet<? extends S> sentences);

    SentenceSet<S> with(S sentence);

    SentenceSet<S> without(S sentence);

    SentenceSet<S> without(Collection<? extends S> sentences);

    SentenceSet<S> without(SentenceSet<? extends S> sentences);

    SentenceSet<S> intersection(SentenceSet<? extends S> sentences);

    Set<S> asSet();

    int size();

    boolean contains(S sentence);

    boolean containsAll(Iterable<? extends S> sentences);

    boolean isEmpty();
}
